package com.itheima._05序列化;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

/**
    目标：序列化和反序列化。

    对象序列化：把对象的数据存储到磁盘文件中去。
    反序列化：可以把磁盘文件中的对象数据恢复成Java对象。

    开发中，对象数据有时候需要暂时存储起来。
    对象序列化要使用：ObjectOutputStream(对象字节输出流):把对象存储到文件中去。
          Java对象  => 磁盘文件
          创建对象：-- public ObjectOutputStream(OutputStream out)
          序列化对象的方法：-- public final void writeObject(Object obj)
          注意：序列化的对象必须实现序列化接口Serializable(存储对象的规则，sun公司规定的)
               建议给对象申明版本号。
               transient修饰的成员变量将不参与序列化！！

    对象序反列化要使用：ObjectInputStream(对象字节输入流):把磁盘文件数据存储到Java对象中返回。
          磁盘文件   => Java对象

            字节流                                                    字符流
     字节输入流                字节输出流                    字符输入流           字符输出流
     InputStream             OutputStream                  Reader              Writer           (抽象类，只是类型)
     FileInputStream         FileOutputStream              FileReader          FileWriter       (实现类，真正使用的管道)
     BufferedInputStream     BufferedOutputStream          BufferedReader      BufferedWriter   (实现类，高级缓冲流)
                                                           InputStreamReader   OutputStreamWriter
     ObjectInputStream       ObjectOutputStream
 */
public class ObjectSerializeDemo01 {
    public static void main(String[] args) throws Exception {
        // 需求：实现对象序列化
        User u = new User("zxxz","紫霞仙子","123456");
        // 1.定义一个对象字节输出流管道与序列化文件接通
        ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("src/obj.dat"));
        // 2.使用对象字节输出流管道，写对象到文件
        oos.writeObject(u); // 序列化对象的方法
        oos.close();
    }
}
